﻿using System;
using System.Web;
//using System.Web.Mail;
using System.Collections.Generic;
using System.Web.UI;
using System.Net.Mail;
using System.Configuration;
using System.Text;
using BusinessLayer.Clases_Seguridad_BO;
using EntityLayer;
namespace Tambini.Web
{
    public partial class Login : System.Web.UI.Page
    {
        /// <summary>
        /// Instancia de Clase que maneja la logica
        /// </summary>
        //SeguridadLogic logic = new SeguridadLogic();
        clsUsuarioBL BL_login = new clsUsuarioBL();
        /// <summary>
        /// Evento de carga de la pagina
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.VerificarEstadoSesion();
                Session["induser"] = 0;
            }
        }

        /// <summary>
        /// Evento de ingreso al sistema
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnIngresar_Click(object sender, EventArgs e)
        {
           // this.Logear();
            this.Logear2();
        }

        string des_email="";
        void RecuperaEmail()
        {

            try
            {
                List<t_usuario> list = BL_login.listaEmail(txtEmail.Text);
                if (list[0].DES_EMAIL == string.Empty)
                {

                }
                else
                {

                    des_email = list[0].DES_EMAIL;

                }

            }
            catch
            {
                //lblMsj.Text = string.Empty;
                //lblMsj.Text = "El email ingresado no existe";
                //string scriptExeption = "ShowPopupLogin();";
                //ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);

            }
        }


         /// Verifica si el usuario ya ha iniciado sesions
               protected void VerificarEstadoSesion()
        {

                HttpCookie cookie = Request.Cookies["InicioSesion"];

                if (cookie != null)
                {
                    if (cookie[DatosSesion.User] != null)
                    {
                        Response.Redirect("~/Index.aspx");
                    }
                }
        }


        /// Permite recuperar el password del usuario
   
        protected void btnRecuperar_Click(object sender, EventArgs e)
        {

            if (txtEmail.Text.Trim() == string.Empty)
            {
                string scriptAprobado = "ShowPopupLogin();";
                lblmensajeuse.Text = "Ingresar Correo Electronico !";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptAprobado, true);
                return;
            }
            else
            {

                this.RecuperaEmail();
                if (des_email == string.Empty)
                {
                    //lblMsj.Text = string.Empty;
                    //lblMsj.Text = "El email ingresado no está registrado";
                    //string scriptExeption = "ShowPopupLogin();";
                    //ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);

                    string scriptAprobado = "ShowPopupLogin();";
                    lblmensajeuse.Text = "El email ingresado no está registrado !";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptAprobado, true);
                    return;
                }
                else
                {
                    
                    this.EnviarPasswordNuevo();
                    this.ActualizaClave();
                    txtEmail.Text = string.Empty;

                }
            }

        }
        string clave = "";
        void ActualizaClave()
        {
            if (Convert.ToInt16(Session["induser"]) == 1)
            {

                BL_login.actualizarPassword(clsSeguridad.Encrypt(clave), des_email);

                string scriptAprobado = "ShowPopupLogin();";
                lblmensajeuse.Text = "Nueva contraseña ha sido enviada a su Correo !";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptAprobado, true);
                Session["induser"] = 0;
                return;
            }
            else {
                string scriptAprobado = "ShowPopupLogin();";
                lblmensajeuse.Text = "Por favor verificar datos del servidor de correo !";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptAprobado, true);
                return;
            }
          
        }
          //MailMessage mail = new MailMessage();
     
        void EnviarPasswordNuevo()
        {
            try
            {
                clave = BL_login.GenerarPass(1, 8);
                MailMessage mail = new MailMessage();
                mail.From = new MailAddress("informes@notariatambini.com", "Tambini");
                mail.To.Add(txtEmail.Text);
                mail.Subject = ("Password Nuevo ");
                mail.Body = ("Su nuevo password es : " + clave);
                SmtpClient s = new SmtpClient();
                s.Host = "SERVIDOR";
                //s.Host = "SERVIDOR.tambinilocal";
                //s.Host = "192.168.1.39";
                //s.Port = 25;
                //s.EnableSsl = false;
                s.UseDefaultCredentials = false;
                s.Credentials = new System.Net.NetworkCredential("informes", "tambini2011");
                s.Send(mail);
                Session["induser"] = 1;
            }
            catch(Exception ex )
            {
                Session["induser"] = 0;
                string scriptAprobado = "ShowPopupLogin();";
                lblmensajeuse.Text = "Por favor verificar datos del servidor de correo !";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptAprobado, true);
                return;
            }

        }



        /// <summary>
        /// Cancela la operacion de recuperacion de password
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            //this.lblMensaje.Text = Tools.GetMessage("LoginIniciarSesion");
            //this.pnlMensaje.CssClass = EstilosPagina.CssMensajeMsg;
            this.pnlLogin.Visible = true;
            this.pnlRecuperar.Visible = false;
        }

        /// <summary>
        /// Muestra el formulario de recuperacion de password
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
    
        /// <summary>
        /// Permite recuperar el password del usuario
        /// </summary>
        //protected void RecuperarPassword()
        //{
        //    //string email = this.txtEmail.Text;
        //    //string nombre = null;
        //    //string password = null;

        //    try
        //    {
        //        string resultado = this.logic.RecuperarPassword(email, out password, out nombre);
        //        this.lblMensaje.Text = Tools.GetMessage(resultado);
        //        if (resultado == ResultadoRecuperarPwd.RecuperacionOK)
        //        {
        //            string subject = String.Format(CadenaHtml.HtmlRecuperarPassword, nombre, password);
        //            Tools.SendEmail(email, null, TextosPantalla.TxtSubjectRecuperacion, subject);
        //            this.pnlMensaje.CssClass = EstilosPagina.CssMensajeExito;
        //        }
        //        else
        //        {
        //            this.pnlMensaje.CssClass = EstilosPagina.CssMensajeAlert;
        //        }
        //    }
        //    catch (Exception)
        //    {
        //        this.lblMensaje.Text = Tools.GetMessage(ResultadoRecuperarPwd.RecuperacionError);
        //        this.pnlMensaje.CssClass = EstilosPagina.CssMensajeError;
        //    }
        //}

        void Logear2()
        {
            string username = this.txtUsuario.Text;
            string password = this.txtPassword.Text;
            string encriptacion = "";
            string clave = "";
            try
            {
                if(username.Trim()==""){
                    string scriptAprobado = "ShowPopupLogin();";
                    lblmensajeuse.Text = "Usuario y/o password incorrecto !";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptAprobado, true);
                    return;
                }
                if (password.Trim() == "")
                {
                    string scriptAprobado = "ShowPopupLogin();";
                    lblmensajeuse.Text = "Usuario y/o password incorrecto !";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptAprobado, true);
                    return;
                }

                string resultado = BL_login.ValidarUsuario(username, password);
                List<t_usuario> listaUsuario = BL_login.listarUser(username);
                if (resultado == ResultadoLogin.LoginOk)
                {
                    //Session[DatosSesion.User] = username;
                    Session[DatosSesion.User] = new t_usuario() { ID_USUARIO = username };
                    Session["usu"] = txtUsuario.Text;
                    Response.Redirect("~/Index.aspx");
                }
                else
                {
                    string scriptAprobado = "ShowPopupLogin();";
                    lblmensajeuse.Text = "Usuario y/o password incorrecto !";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptAprobado, true);
                //  lblmensaje.Text = "Cliente Registrado Correctamente";
                //ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
                }



                //if (listaUsuario.Count > 0)
                //{
                //    encriptacion = listaUsuario[0].DES_PASSWORD;
                //    //System.Data.Objects.ObjectResult<string> c = BL_login.DesEncriptarUser(encriptacion);
                //    encriptacion = BL_login.DesEncriptarUser(encriptacion);
                //    if (encriptacion == password)
                //    {

                //        Session[DatosSesion.User] = username;
                //        Session["usu"] = txtUsuario.Text;
                //        Response.Redirect(Constantes.PaginaDefault);

                //    }
                //    else
                //    {

                //        string scriptAprobado = "ShowPopupLogin();";
                //        ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptAprobado, true);

                //        //this.lblMensaje.Text = Tools.GetMessage(ResultadoRecuperarPwd.RecuperacionError);
                //        //this.pnlMensaje.CssClass = EstilosPagina.CssMensajeError;
                //    }
                //}
            }
            catch (Exception)
            {
                
            }
          
        }

        protected void btnIngresar_Click1(object sender, EventArgs e)
        {
            this.Logear2();
        }
        public struct ResultadoLogin
        {
            /// <summary>
            /// El login es correcto
            /// </summary>
            public const string LoginOk = "OK";

            /// <summary>
            /// El usuario no existe
            /// </summary>
            public const string LoginUserNoxiste = "seg_user_noexiste";

            /// <summary>
            /// El usuario esta inactivo
            /// </summary>
            public const string LoginUserInactivo = "seg_user_noactivo";

            /// <summary>
            /// El password ingresado no es correcto
            /// </summary>
            public const string LoginPwdIncorrecto = "seg_pws_incorrecto";
        }

        protected void btnnuevocliente_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Transaciones/wfmRegistroCliente.aspx");  
        }

        protected void btnClave_Click(object sender, EventArgs e)
        {
            this.pnlRecuperar.Visible = true;
            this.pnlLogin.Visible = false;
        }


    }
}